package com.cloud.code.单例模式.静态内部类单例;

/**
 * 反射和反序列化都会破解单例
 * 可以通过私有构造判断实例是否存在
 * 反序列化破解单例 ， 可以通过重写readResolve方法来返回之前的实例
 */
public class User {

    private String username;

    private User(){
        if (Inner.USER != null)
            throw new RuntimeException("不允许创建多个实例。。");
    }

    public static final User getInstance(){
        return Inner.USER;
    }

    //静态内部类，利用了类的加载机制 ，保证了线程安全问题 ，并且是懒加载模式单例
    private static class Inner{
        private static final User USER = new User();
    }

    private Object readResolve(){
        return Inner.USER;
    }
}
